a48f9fd4652e0de8accb2b9b0e0da10d193553a0,src/web/org/codehaus/groovy/grails/web/metaclass/ControllerDynamicMethods.java,ControllerDynamicMethods,ControllerDynamicMethods,#GroovyObject#GrailsControllerHelper#HttpServletRequest#HttpServletResponse#,83
Before Change
String[] scaffoldActions = this.scaffolder.getSupportedActionNames();
for (int i = 0; i < scaffoldActions.length; i++) {
try {
controller.getProperty(scaffoldActions[i]);
}
catch(MissingPropertyException mpe) {
addDynamicProperty(new GenericDynamicProperty( scaffoldActions[i],
After Change
public ControllerDynamicMethods( GroovyObject controller,GrailsControllerHelper helper,final HttpServletRequest request, HttpServletResponse response) throws IntrospectionException {
super(controller);
this.controllerClass = helper.getControllerClassByName(controller.getClass().getName());
this.grailsAttributes = helper.getGrailsAttributes();
// add dynamic properties
addDynamicProperty(new GetParamsDynamicProperty(request,response));
addDynamicProperty(new GetSessionDynamicProperty(request,response));
addDynamicProperty(new GenericDynamicProperty(REQUEST_PROPERTY, HttpServletRequest.class,new GrailsHttpServletRequest( request,controller),true) );
addDynamicProperty(new GenericDynamicProperty(RESPONSE_PROPERTY, HttpServletResponse.class,response,true) );
addDynamicProperty(new GenericDynamicProperty(SERVLET_CONTEXT, ServletContext.class,helper.getServletContext(),true) );
addDynamicProperty(new GenericDynamicProperty(FLASH_SCOPE_PROPERTY, FlashScope.class,grailsAttributes.getFlashScope(request),false) );
addDynamicProperty(new GenericDynamicProperty(ERRORS_PROPERTY, Errors.class, null, false));
addDynamicProperty(new GenericDynamicProperty(MODEL_AND_VIEW_PROPERTY, ModelAndView.class,null,false));
addDynamicProperty(new GenericDynamicProperty(GRAILS_ATTRIBUTES, GrailsApplicationAttributes.class,grailsAttributes,true));
addDynamicProperty(new GenericDynamicProperty(GRAILS_APPLICATION, GrailsApplication.class,grailsAttributes.getGrailsApplication(),true));
addDynamicProperty(new GenericDynamicProperty(ACTION_URI_PROPERTY,String.class,null,false));
addDynamicProperty(new GenericDynamicProperty(CONTROLLER_URI_PROPERTY,String.class,null,false));
addDynamicProperty(new GenericDynamicProperty(ACTION_NAME_PROPERTY,String.class,null,false));
addDynamicProperty(new GenericDynamicProperty(CONTROLLER_NAME_PROPERTY,String.class,null,false));
addDynamicProperty(new GenericDynamicProperty(RENDER_VIEW_PROPERTY,Boolean.class, Boolean.TRUE,false));
addDynamicProperty(new GenericDynamicProperty(LOG_PROPERTY, Log.class,
LogFactory.getLog(controllerClass.getFullName()),true));
// add dynamic methods
addDynamicMethodInvocation( new RedirectDynamicMethod(helper,request,response) );
addDynamicMethodInvocation( new ChainDynamicMethod(helper, request, response ) );
addDynamicMethodInvocation( new RenderDynamicMethod(helper,request,response));
addDynamicMethodInvocation( new BindDynamicMethod(request,response));
// the getViewUri(name,request) method that retrieves the name of a view for current controller
addDynamicMethodInvocation( new AbstractDynamicMethodInvocation(GET_VIEW_URI_PATTERN){
public Object invoke(Object target, Object[] arguments) {
if(arguments.length==0)
throw new MissingMethodException(GET_VIEW_URI,target.getClass(),arguments);
if(arguments[0] == null)
throw new IllegalArgumentException("Argument [viewName] of method [" + GET_VIEW_URI + "] cannot be null");
return grailsAttributes.getViewUri(arguments[0].toString(), request);
}
});
// the getTemplateUri(name,request) method that retrieves the name of a template for current controller
addDynamicMethodInvocation( new AbstractDynamicMethodInvocation(GET_TEMPLATE_URI_PATTERN){
public Object invoke(Object target, Object[] arguments) {
if(arguments.length==0)
throw new MissingMethodException(GET_TEMPLATE_URI,target.getClass(),arguments);
if(arguments[0] == null)
throw new IllegalArgumentException("Argument [templateName] of method [" + GET_TEMPLATE_URI + "] cannot be null");
return grailsAttributes.getTemplateUri(arguments[0].toString(),request);
}
});
// the hasErrors() dynamic method that checks of there are any errors in the controller
addDynamicMethodInvocation( new AbstractDynamicMethodInvocation(HAS_ERRORS_METHOD_PATTERN) {
public Object invoke(Object target, Object[] arguments) {
GroovyObject controller = (GroovyObject)target;
Errors errors = (Errors)controller.getProperty(ERRORS_PROPERTY);
return Boolean.valueOf(errors.hasErrors());
}
});
this.scaffolding = this.controllerClass.isScaffolding();
// if the controller is scaffolding get the scaffolder, then loop through all the
// support actions by the scaffolder and register dynamic properties for those that don't exist
if(this.scaffolding) {
this.scaffolder = helper.getScaffolderForController(controllerClass.getFullName());
if(this.scaffolder == null) {
throw new IllegalStateException("Scaffolder is null when controller scaffold property is set to 'true'");
}
String[] scaffoldActions = this.scaffolder.getSupportedActionNames();
for (int i = 0; i < scaffoldActions.length; i++) {
Map properties = DefaultGroovyMethods.getProperties(controller);
if(!properties.containsKey(scaffoldActions[i])) {
addDynamicProperty(new GenericDynamicProperty( scaffoldActions[i],
Closure.class,
scaffolder.getAction(controller,scaffoldActions[i]),